package com.zkthink.ceres.pay.wechat.v3.service.ecommerce;

import com.zkthink.ceres.pay.wechat.v3.entity.request.profitsharing.*;
import com.zkthink.ceres.pay.wechat.v3.entity.result.profitsharing.*;

/**
 * <p>
 * 请求分账API
 * 微信订单支付成功后，由电商平台发起分账请求，将结算后的资金分给分账接收方。
 * 适用于已开通电商收付通的电商平台及二级商户，电商平台可通过供应链分账实现对平台二级商户的账期管理和资金分配。
 * </p>
 *
 * @author vivi.huang
 * @since 2020/6/16
 */
public interface ProfitsharingService {


    /**
     * 请求分账API
     * 微信订单支付成功后，由电商平台发起分账请求，将结算后的资金分给分账接收方。
     * @param createProfitsharingRequest
     * @return
     */
    CreateProfitsharingResult createProfitsharing(CreateProfitsharingRequest createProfitsharingRequest);


    /**
     * 查询分账结果API
     * 发起分账请求后，可调用此接口查询分账结果 ;发起分账完结请求后，可调用此接口查询分账完结的结果
     * @param queryProfitsharingRequest
     * @return
     */
    QueryProfitsharingResult queryProfitsharing(QueryProfitsharingRequest queryProfitsharingRequest);

    /**
     * 请求分账回退API
     * 订单已经分账，在退款时，可以先调此接口，将已分账的资金从分账接收方的账户回退给分账方，再发起退款。
     * @param returnProfitsharingRequest
     * @return
     */
    ReturnProfitsharingResult returnProfitsharing(ReturnProfitsharingRequest returnProfitsharingRequest);

    /**
     * 查询分账回退结果API
     * @param queryReturnProfitsharingRequest
     * @return
     */
    QueryReturnProfitsharingResult queryReturnProfitsharing(QueryReturnProfitsharingRequest queryReturnProfitsharingRequest);

    /**
     * 完结分账API
     * 不需要进行分账的订单，可直接调用本接口将订单的金额全部解冻给二级商户。
     * @param finishProfitsharingRequest
     * @return
     */
    FinishProfitsharingResult finishProfitsharing(FinishProfitsharingRequest finishProfitsharingRequest);

    /**
     * 添加分账接收方API
     * 1. 电商平台可通过此接口添加分账接收方，建立分账接收方列表。后续通过发起分账请求，将电商平台下的二级商户结算后的资金，分给分账接收方列表中具体的分账接收方。
     * 2. 添加的分账接收方统一都在电商平台维度进行管理，其他二级商户，均可向该分账接收方列表中的接收方进行分账，避免在二级商户维度重复维护
     * @param addProfitsharingReceiversRequest
     * @return
     */
    AddProfitsharingReceiversResult addProfitsharingReceivers(AddProfitsharingReceiversRequest addProfitsharingReceiversRequest);


    /**
     *  删除分账接收方API
     *  电商平台发起删除分账接收方请求。删除后，不支持将电商平台下二级商户结算后的资金，分到该分账接收方。
     * @param deleteProfitsharingReceiversRequest
     * @return
     */
    DeleteProfitsharingReceiversResult deleteProfitsharingReceivers(DeleteProfitsharingReceiversRequest deleteProfitsharingReceiversRequest);





}